1
Giới thiệu về PyTorch: Vì sao Tensor lại quan trọng
EvoClass-AI002Bài giảng 1
00:00

Giới thiệu về PyTorch: Vì sao Tensor lại quan trọng

PyTorch là một khung phần mềm mã nguồn mở linh hoạt và động, được ưa chuộng trong nghiên cứu học sâu và phát triển nhanh. Ở cốt lõi của nó là Tensor là cấu trúc dữ liệu không thể thiếu. Nó là một mảng đa chiều được thiết kế để xử lý hiệu quả các thao tác số học cần thiết cho mô hình học sâu, hỗ trợ tính năng tăng tốc GPUtăng tốc GPU một cách tự động.

1. Hiểu cấu trúc Tensor

Mọi đầu vào, đầu ra và tham số mô hình trong PyTorch đều được bao bọc trong một Tensor. Chúng có chức năng tương tự như mảng NumPy nhưng được tối ưu để xử lý trên các thiết bị chuyên dụng nhưGPU, giúp chúng hiệu quả hơn rất nhiều đối với các phép toán đại số tuyến tính quy mô lớn mà mạng nơ-ron yêu cầu.

Các thuộc tính chính xác định Tensor:

  • Hình dạng: Xác định kích thước dữ liệu, được biểu diễn dưới dạng bộ (ví dụ: $4 \times 32 \times 32$ cho một tập ảnh).
  • Kiểu dữ liệu: Xác định kiểu số của các phần tử được lưu trữ (ví dụ: torch.float32 cho trọng số mô hình, torch.int64 cho chỉ mục).
  • Thiết bị: Chỉ vị trí phần cứng vật lý: thường là 'cpu' hoặc 'cuda' (GPU NVIDIA).
Đồ thị động và Autograd
PyTorch sử dụng mô hình thực thi mệnh lệnh, nghĩa là đồ thị tính toán được xây dựng khi các thao tác được thực hiện. Điều này cho phép công cụ đạo hàm tự động tích hợp sẵn, Autograd, để theo dõi mọi thao tác trên Tensor, miễn là thuộc tính requires_grad=True được thiết lập, cho phép tính toán gradient một cách dễ dàng trong quá trình truyền ngược.
fundamentals.py
THƯỜNG TRÌNHbash — pytorch-env
> Đã sẵn sàng. Nhấn "Chạy" để thực thi.
>
TRÌNH KIỂM TRA TENSOR Trực tiếp

Chạy mã để kiểm tra các Tensor đang hoạt động
Câu hỏi 1
Lệnh nào tạo ra một tensor $5 \times 5$ chứa các số ngẫu nhiên theo phân bố đều từ 0 đến 1?
torch.rand(5, 5)
torch.random(5, 5)
torch.uniform(5, 5)
torch.randn(5, 5)
Câu hỏi 2
Nếu tensor $A$ nằm trên CPU, và tensor $B$ nằm trên thiết bị CUDA, điều gì xảy ra nếu bạn cố gắng tính $A + B$?
Một lỗi xảy ra vì các thao tác yêu cầu các tensor phải nằm trên cùng một thiết bị.
PyTorch tự động di chuyển $A$ sang thiết bị CUDA và tiếp tục.
Thao tác được thực hiện trên CPU, và kết quả được trả về CPU.
Câu hỏi 3
Loại dữ liệu (dtype) phổ biến nhất dùng cho trọng số mô hình và các phép tính trung gian trong học sâu là gì?
torch.float32 (số dấu phẩy động độ chính xác đơn)
torch.int64 (số nguyên dài)
torch.bool
torch.float64 (số dấu phẩy động độ chính xác kép)
Thử thách: Biến đổi Tensor và Hình dạng
Chuẩn bị một tensor cho một phép toán ma trận cụ thể.
Bạn có một vector đặc trưng $F$ với hình dạng $(10,)$. Bạn cần nhân nó với một ma trận trọng số $W$ có hình dạng $(10, 5)$. Để phép nhân ma trận (MatMul) hoạt động, $F$ phải là 2 chiều.
Bước 1
Hình dạng của $F$ nên là gì trước khi nhân với $W$?
Giải pháp:
Các chiều bên trong phải khớp, do đó $F$ phải là $(1, 10)$. Sau đó $(1, 10) @ (10, 5) \rightarrow (1, 5)$.
Mã: F_new = F.unsqueeze(0) hoặc F_new = F.view(1, -1)
Bước 2
Thực hiện phép nhân ma trận giữa $F_{new}$ và $W$ (hình dạng $(10, 5)$).
Giải pháp:
Thao tác là phép nhân ma trận đơn giản.
Mã: output = F_new @ W hoặc output = torch.matmul(F_new, W)
Bước 3
Phương thức nào trả về một tensor với kích thước đã chỉ định rõ ràng, cho phép bạn làm phẳng tensor trở lại thành $(50,)$? (Giả sử ban đầu $F$ là $(5, 10)$ và giờ đã được làm phẳng.)
Giải pháp:
Dùng phương thức view hoặc reshape để làm phẳng. Cách nhanh nhất thường là dùng -1 cho một chiều.
Mã: F_flat = F.view(-1) hoặc F_flat = F.reshape(50)